package com.bdqn.component;

import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;


/**
 * 自定义的相依结果
 * @author jinge
 * @param <T>
 *
 */
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
public class ServerRespsone<T>  implements  Serializable {

	/**
	 * 标志操作的结果  0 标识成功  1 便是失败
	 */
	private   StatusType   status;
	private   String   msg; 
	private    T   data;  
	
	
	
	private ServerRespsone(){}
	private ServerRespsone(StatusType status, String msg) {
		super();
		this.status = status;
		this.msg = msg;
	}
	private ServerRespsone(StatusType status, String msg, T data) {
		super();
		this.status = status;
		this.msg = msg;
		this.data = data;
	}



	/**
	 * 成功的结果
	 * @return
	 */
	public static   <T> ServerRespsone<T>   createSuccess(){
		return  new ServerRespsone<T>(StatusType.SUCCESS, null);
	}
	
	/**
	 * 成功的结果
	 * @param msg 提示信息
	 * @return
	 */
	public static  <T> ServerRespsone<T>   createSuccess(String msg){
		return  new ServerRespsone<T>(StatusType.SUCCESS, msg);
	}
	
	/**
	 * 成功的结果
	 * @param msg 提示信息文字
	 * @param data 数据
	 * @return
	 */
	public static  <T> ServerRespsone<T>   createSuccess(String msg,T data){
		return  new ServerRespsone<T>(StatusType.SUCCESS, msg,data);
	}
	
	/**
	 * 错误结果
	 * @return
	 */
	public static  <T> ServerRespsone<T> createError(){
		return  new ServerRespsone<T>(StatusType.ERROR,null);
	}
	
	/**
	 * 错误结果
	 * @param msg  错误的提示文字
	 * @return
	 */
	public  static <T> ServerRespsone<T> createError(String  msg){
		return  new ServerRespsone<T>(StatusType.ERROR,msg);
	}
	
	/**
	 * 错误结果
	 * @param msg  错误的提示文字
	 * @return
	 */
	public  static <T> ServerRespsone<T> createError(String  msg,T data){
		return  new ServerRespsone<T>(StatusType.ERROR,msg,data);
	}
	
	
	
	/**
	 * 自定义结果
	 * @param statusType 结果的类型
	 * @return
	 */
	public static  <T> ServerRespsone<T> createResult(StatusType statusType){
		return  new ServerRespsone<T>(statusType,null);
	}
	
	/**
	 * 自定义结果
	 * @param statusType  结果的类型
	 * @param msg 提示的信息
	 * @return
	 */
	public  static  <T> ServerRespsone<T> createResult(StatusType statusType,String msg){
		return  new ServerRespsone<T>(statusType,msg);
	}
	
	/**
	 * 自定义结果
	 * @param statusType 结果的类型
	 * @param msg 提示的信息
	 * @param data  返回的数据
	 * @return
	 */
	public static  <T> ServerRespsone<T> createResult(StatusType statusType,String msg,T data){
		return  new ServerRespsone<T>(statusType,msg,data);
	}
	
	
	
	@JsonIgnore
	public  boolean  isSuccess(){
		return  status.getCode()==0?true:false;
	} 
	
	
	public  String getStatus(){
		return  status.getValue();
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public T getData() {
		return data;
	}
	public void setData(T data) {
		this.data = data;
	}
	
	
}
